//
// Created by 孙代宇 on 2021/12/29.
//

#ifndef UNTITLED2_LINKEDSTACK_H
#define UNTITLED2_LINKEDSTACK_H
#include "stdlib.h"

class LinkedStack {
public:
    typedef struct LNode {
        int value;
        struct LNode *next;
    } LNode, *linkedStack;
    linkedStack list;

    bool InitLinkedStack(linkedStack &L){
        L = (LNode *)malloc(sizeof(LNode));
        if (L == NULL) return false;

        L->next = NULL;

        return true;
    }

    bool PushElement(linkedStack &l, int value){
        LNode *node = (LNode *)malloc(sizeof(LNode));
        if (node == NULL) return false;

        node->value = value;
        node->next = l->next;
        l->next = node;

        return true;
    }

    bool PopElement(linkedStack &l, int &data){
        if (l->next == NULL){
            data = NULL;
            return false;
        }

        data = l->next->value;
        l->next = l->next->next;
        return true;
    }

    bool PeekElement(linkedStack &l, int &data){
        if (l->next == NULL){
            data = NULL;
            return false;
        }

        data = l->next->value;
        return true;
    }
};


#endif //UNTITLED2_LINKEDSTACK_H
